package com.monitor.service;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

import com.monitor.model.Sensor;
import com.monitor.model.Warning;

public class WarningService {
	private Lock lock = new ReentrantLock();
	private Warning warning;
	private int sensorMaxTime;// 允许节点发送数据的最大间隔时间 现在的时间和normal里的时间差大于该值说明应报警 单位
								// 秒s

	public WarningService(Warning warning, int sensorMaxTime) {
		this.warning = warning;
		this.sensorMaxTime = sensorMaxTime;
	}

	/**
	 * 获取normal里的信息 判断是不是有传感器没有发送数据
	 * 
	 * @return true 一切正常 false 异常 有传感器没有工作
	 */
	public boolean getNormalInfo() {
		lock.lock();
		List<Sensor> sensors = Sensor.sensor.find("select * from sensor");
		Map<Sensor, Date> normal = warning.getNormal();
		boolean normalStatus = true;
		// 判断两次 一是normal有没有全部的在数据库的节点 如果有使用后有节点坏掉的话要删除数据库sensor表里这个节点是数据
		// TODO 以后看情况加上网页上删除某个节点的数据
		for (Sensor sensor : sensors) {
			if (normal.containsKey(sensor)) {
				// 判断时间
				if (new Date().getTime() - normal.get(sensor).getTime() > sensorMaxTime * 1000) {
					normalStatus = false;
				}
			} else {
				normalStatus = false;
			}
		}
		lock.unlock();
		return normalStatus;

	}

	public void setNormalInfo(Sensor sensor) {
		lock.lock();
		warning.getNormal().put(sensor, new Date());
		lock.unlock();
	}
}
